#!/bin/bash
# 脚本：opengauss_install.sh
# 适用于 openEuler2403 系统安装 openGauss 数据库
# 注意：请以 root 用户执行此脚本
# 作者：洛白（luogoddes） 🐋https://space.bilibili.com/2025251948?spm_id_from=333.1007.0.0

#########################
# 全局配置变量
#########################
USER_GROUP="dbgroup"
OMM_USER="omm"
OMM_USER_PASSWORD_DEFAULT="123456"   # 默认密码，如果用户已存在且非默认，则会保存用户输入的新密码
DB_INIT_PASSWORD="Gauss@123"         # openGauss 初始化数据库密码
CURRENT_IP=""                        # 服务器IP
DB_PORT="5432"                       # 数据库端口
INTERFACE="ens160"       # openEuler22.03 常见的网卡名称，视实际情况调整

#########################
# 定义彩色输出变量
#########################
BG_RED='\e[1;31m'    # 高亮红色前景色
BG_GREEN='\e[1;32m'  # 高亮绿色前景色
BG_YELLOW='\e[1;33m' # 高亮黄色前景色
BG_BLUE='\e[1;34m'   # 高亮蓝色前景色
BG_PURPLE='\e[1;35m' # 高亮紫色前景色
BG_CYAN='\e[1;36m'   # 高亮青色前景色
NC='\e[0m'           # 无颜色（保持不变）

#########################
# 检查 -y 参数
#########################
AUTO_MODE=0
if [ "$1" == "-y" ]; then
    AUTO_MODE=1
    echo -e "${BG_GREEN}[洛洛提示] 启用无交互模式，所有选项将使用默认值...${NC}"
fi

#########################
# 1. 网络配置修改（静态IP）
#########################
modify_network() {
    echo -e "${BG_CYAN}🚀 [洛洛 - 步骤 1] 检查并修改网络配置${NC}"
    # 动态获取当前有效网卡（优先级高于全局变量）
    local detected_interface=$(ip route show default 2>/dev/null | awk '/default/ {print $5}')
    
    # 网卡名称智能更新逻辑
    if [[ -n "$detected_interface" && "$detected_interface" != "$INTERFACE" ]]; then
        echo -e "${BG_YELLOW}🔀 检测到网卡变化：${INTERFACE} -> ${detected_interface}${NC}"
        INTERFACE="$detected_interface"
    fi
    CONFIG_FILE="/etc/sysconfig/network-scripts/ifcfg-${INTERFACE}"
    local restore_flag=0  # 回滚标志位

    # 检查配置文件是否存在
    if [ -z "$INTERFACE" ] || [ ! -f "$CONFIG_FILE" ]; then
        echo -e "${BG_RED}未找到网络配置文件 $CONFIG_FILE，请检查网卡名称或网络状态！${NC}"
        return 1
    fi

    # 获取当前IP地址
    CUR_IP=$(ip addr show ${INTERFACE} | awk '/inet / {print $2}' | cut -d/ -f1 | head -n1)
    if [ -z "$CUR_IP" ]; then
        echo -e "${BG_RED}无法检测到当前 IP，请检查网络！${NC}"
        return 1
    fi
    CURRENT_IP="$CUR_IP"
    echo -e "${BG_YELLOW}检测到当前 IP：${CUR_IP}${NC}"

    # 用户确认修改
    read -p "是否需要将当前 IP 修改为静态 IP？(Y/N): " modify_choice
    if [[ "$modify_choice" =~ ^[Yy]$ ]]; then
        # 备份配置文件（带时间戳）
        local timestamp=$(date +%Y%m%d%H%M%S)
        BACKUP_FILE="/etc/sysconfig/network-scripts/ifcfg-${INTERFACE}.bak_${timestamp}"
        cp "$CONFIG_FILE" "$BACKUP_FILE"
        echo -e "${BG_GREEN}✅ 已备份原配置到 $BACKUP_FILE${NC}"

        # 修改BOOTPROTO为静态
        sed -i 's/^BOOTPROTO=.*/BOOTPROTO=static/' "$CONFIG_FILE"

        # 生成新IP地址
        IP_PREFIX=$(echo "$CUR_IP" | awk -F. '{print $1"."$2"."$3"."}')
        read -p "请输入新的 IP 地址最后一段数字(3-254): " ip_last
        
        if [[ "$ip_last" =~ ^[0-9]+$ ]] && [ "$ip_last" -ge 3 ] && [ "$ip_last" -le 254 ]; then
            NEW_IP="${IP_PREFIX}${ip_last}"
            CURRENT_IP="$NEW_IP"

            # 使用sed智能修改/添加配置项
            sed -i '/^IPADDR=/{s//IPADDR='"${NEW_IP}"'/;b}; $aIPADDR='"${NEW_IP}"'' "$CONFIG_FILE"
            sed -i '/^NETMASK=/{s//NETMASK=255.255.255.0/;b}; $aNETMASK=255.255.255.0' "$CONFIG_FILE"
            sed -i '/^GATEWAY=/{s//GATEWAY='"${IP_PREFIX}"'2/;b}; $aGATEWAY='"${IP_PREFIX}"'2' "$CONFIG_FILE"
            sed -i '/^DNS1=/{s//DNS1='"${IP_PREFIX}"'2/;b}; $aDNS1='"${IP_PREFIX}"'2' "$CONFIG_FILE"
            sed -i '/^DNS2=/{s//DNS2=114.114.114.114/;b}; $aDNS2=114.114.114.114' "$CONFIG_FILE"

            echo -e "${BG_GREEN}✅ 网络配置文件已更新${NC}"

            # 重启网络服务（兼容systemd和SysVinit）
            echo -e "${BG_CYAN}正在重启网络服务...${NC}"
            if systemctl restart NetworkManager 2>/dev/null || systemctl reload NetworkManager 2>/dev/null; then
                echo -e "${BG_GREEN}✅ 网络服务重启成功，等待5秒网络稳定...${NC}"
                sleep 5
                
                # 网络连通性测试
                echo -e "${BG_CYAN}测试网络连通性...${NC}"
                if ping -c 4 -W 3 baidu.com &> /dev/null; then
                    echo -e "${BG_GREEN}✅ 网络连接正常，新IP地址：${NEW_IP}${NC}"
                else
                    echo -e "${BG_RED}⚠ 网络连接异常，开始回滚配置...${NC}"
                    restore_flag=1
                fi
            else
                echo -e "${BG_RED}错误：网络服务重启失败，开始回滚配置...${NC}"
                restore_flag=1
            fi

            # 配置回滚逻辑
            if [ $restore_flag -eq 1 ]; then
                echo -e "${BG_YELLOW}正在恢复原始配置...${NC}"
                # 还原备份文件
                if cp "$BACKUP_FILE" "$CONFIG_FILE"; then
                    echo -e "${BG_GREEN}✅ 配置还原成功，尝试重启网络服务...${NC}"
                    # 再次尝试重启服务
                    if systemctl restart NetworkManager 2>/dev/null || systemctl reload NetworkManager 2>/dev/null; then
                        echo -e "${BG_GREEN}✅ 服务重启成功，等待5秒网络稳定...${NC}"
                        sleep 5
                        # 验证回滚后的连通性
                        if ping -c 4 -W 3 baidu.com &> /dev/null; then
                            echo -e "${BG_GREEN}✅ 配置回滚成功，网络已恢复${NC}"
                        else
                            echo -e "${BG_RED}⚠ 紧急错误：回滚后仍无法连接网络！请手动检查以下内容："
                            echo -e "1. 物理网络连接"
                            echo -e "2. 备份文件位置：$BACKUP_FILE"
                            echo -e "3. 使用命令：nmtui 进行图形化配置${NC}"
                            return 2
                        fi
                    else
                        echo -e "${BG_RED}严重错误：无法重启网络服务！请尝试以下操作："
                        echo -e "1. 手动执行：cp $BACKUP_FILE $CONFIG_FILE"
                        echo -e "2. 手动执行：systemctl restart network${NC}"
                        return 3
                    fi
                else
                    echo -e "${BG_RED}致命错误：无法还原备份文件！请手动操作："
                    echo -e "cp $BACKUP_FILE $CONFIG_FILE${NC}"
                    return 4
                fi
                return 1
            fi
        else
            echo -e "${BG_RED}⚠ 输入的数字不正确！${NC}"
            return 1
        fi
    else
        echo -e "${BG_YELLOW}[-] 已取消修改网络配置。${NC}"
    fi
    echo -e "${BG_GREEN}--------------------------------------------------${NC}"
}

#########################
# 2. 防火墙配置
#########################
configure_firewall() {
    echo -e "${BG_CYAN}🚀 [洛洛 - 步骤 2] 配置防火墙${NC}"
    if command -v firewall-cmd >/dev/null 2>&1 && systemctl is-active firewalld &>/dev/null; then
        echo -e "${BG_GREEN}检测到 firewalld 正在运行，添加 ${DB_PORT} 端口到防火墙...${NC}"
        firewall-cmd --zone=public --add-port=${DB_PORT}/tcp --permanent
        firewall-cmd --reload
        echo -e "${BG_GREEN}✅ 防火墙配置完成${NC}"
    else
        echo -e "${BG_YELLOW}[-] 未检测到 firewalld，配置 iptables...${NC}"
        if command -v iptables >/dev/null 2>&1; then
            # 检查iptables服务是否运行
            if systemctl is-active iptables &>/dev/null || [ -e /etc/sysconfig/iptables ]; then
                # 添加端口规则
                iptables -A INPUT -p tcp --dport ${DB_PORT} -j ACCEPT
                # 保存规则（根据系统不同可能需要不同的命令）
                if command -v iptables-save >/dev/null 2>&1; then
                    iptables-save > /etc/sysconfig/iptables
                    echo -e "${BG_GREEN}✅ iptables 规则已添加并保存${NC}"
                elif command -v netfilter-persistent >/dev/null 2>&1; then
                    netfilter-persistent save
                    echo -e "${BG_GREEN}✅ iptables 规则已添加并保存${NC}"
                else
                    echo -e "${BG_YELLOW}[!] 无法保存iptables规则，请手动保存${NC}"
                fi
            else
                echo -e "${BG_YELLOW}[+] iptables 服务未运行，但添加了临时规则${NC}"
                iptables -A INPUT -p tcp --dport ${DB_PORT} -j ACCEPT
            fi
        else
            echo -e "${BG_YELLOW}[!] iptables 命令未找到，跳过防火墙配置${NC}"
        fi
    fi
    echo -e "${BG_GREEN}--------------------------------------------------${NC}"
}

#########################
# 3. 关闭Swap并输出原因
#########################
disable_swap() {
    echo -e "${BG_CYAN}🚀 [洛洛 - 步骤 3] 关闭Swap${NC}"
    echo -e "${BG_BLUE}💻 关闭Swap（swapoff -a），原因：防止Swap影响数据库性能${NC}"
    swapoff -a
    echo -e "${BG_GREEN}✅ Swap 已关闭${NC}"
    echo -e "${BG_GREEN}--------------------------------------------------${NC}"
}

#########################
# 4. 创建用户组和用户 OMM_USER
#########################
create_group_user() {
    echo -e "${BG_CYAN}🚀 [洛洛 - 步骤 4] 创建用户组和用户${NC}"
    if ! getent group ${USER_GROUP} >/dev/null; then
        groupadd ${USER_GROUP} && echo -e "${BG_GREEN}✅ 用户组 ${USER_GROUP} 创建成功${NC}"
    else
        echo -e "${BG_YELLOW}[+] 用户组 ${USER_GROUP} 已存在${NC}"
    fi

    if ! id ${OMM_USER} &>/dev/null; then
        useradd -g ${USER_GROUP} ${OMM_USER} && echo "${OMM_USER}:${OMM_USER_PASSWORD_DEFAULT}" | chpasswd
        echo -e "${BG_GREEN}✅ 用户 ${OMM_USER} 创建成功，默认密码为 ${OMM_USER_PASSWORD_DEFAULT}${NC}"
    else
        echo -e "${BG_YELLOW}[+] 用户 ${OMM_USER} 已存在${NC}"
        if [ $AUTO_MODE -eq 1 ]; then
            echo -e "${BG_GREEN}✅ 无交互模式下，修改 ${OMM_USER} 密码为 ${OMM_USER_PASSWORD_DEFAULT}${NC}"
            echo "${OMM_USER}:${OMM_USER_PASSWORD_DEFAULT}" | chpasswd
        else
            read -p "如果当前 ${OMM_USER} 用户密码不是默认密码(${OMM_USER_PASSWORD_DEFAULT})，请输入当前密码；直接回车则保持默认: " input_pwd
            if [ -n "$input_pwd" ]; then
                OMM_USER_PASSWORD_DEFAULT="$input_pwd"
                echo -e "${BG_GREEN}✅ 已保存输入的密码${NC}"
            else
                echo -e "${BG_GREEN}✅ 保持默认密码 ${OMM_USER_PASSWORD_DEFAULT}${NC}"
            fi
        fi
    fi
    echo -e "${BG_GREEN}--------------------------------------------------${NC}"
}

#########################
# 5. 创建目录、修改权限并安装tar
#########################
setup_directories() {
    echo -e "${BG_CYAN}🚀 [洛洛 - 步骤 5] 设置目录和权限${NC}"
    mkdir -p /opt/software/openGauss
    chmod 755 -R /opt/software
    chown -R ${OMM_USER} /opt/software/openGauss
    echo -e "${BG_GREEN}✅ 目录 /opt/software/openGauss 已创建并授权给 ${OMM_USER}${NC}"

    echo -e "${BG_BLUE}💻 安装 tar 工具...${NC}"
    yum install -y tar
    echo -e "${BG_GREEN}✅ tar 工具安装完成${NC}"
    echo -e "${BG_GREEN}--------------------------------------------------${NC}"
}

#########################
# 6. 下载 db 脚本到 /usr/local/bin/
#########################
download_db_script() {
    echo -e "${BG_CYAN}🚀 [洛洛 - 步骤 6] 下载 db 脚本${NC}"
    DB_SCRIPT_URL="https://gitee.com/luobai-bg/warehouse-2/raw/master/opengauss/db"
    curl -sL "$DB_SCRIPT_URL" | sed 's/\r//g' > /usr/local/bin/db
    
    if [ $? -eq 0 ]; then
        chmod 755 /usr/local/bin/db
        echo -e "${BG_GREEN}✅ db 脚本已下载到 /usr/local/bin/db${NC}"
    else
        echo -e "${BG_RED}⚠ 下载 db 脚本失败，请检查网络！${NC}"
    fi
    echo -e "${BG_GREEN}--------------------------------------------------${NC}"
}

#########################
# 7. omm 用户下安装 openGauss
#########################
install_opengauss() {
    echo -e "${BG_CYAN}🚀 [洛洛 - 步骤 7] 下载并安装 openGauss${NC}"
    su - ${OMM_USER} -c '
        set -e
        PACKAGE_NAME="openGauss-Server-7.0.0-RC1-openEuler24.03-x86_64.tar.bz2"
        PACKAGE_URL="https://files.zohopublic.com.cn/public/workdrive-public/download/w7e3cb1c07335384b4197819bcef269cfa25f?x-cli-msg=%7B%22isFileOwner%22%3Afalse%2C%22version%22%3A%221.0%22%2C%22isWDSupport%22%3Afalse%7D"

        if [ -f "${PACKAGE_NAME}" ]; then
            echo -e "\e[32m[+]安装包已存在，跳过下载直接解压...\e[0m"
        else
            echo -e "\e[33m🌍 开始下载 openGauss 安装包...\e[0m"
            curl -L -X GET "$PACKAGE_URL" -o ${PACKAGE_NAME}
            if [ $? -ne 0 ]; then
                echo -e "\e[31m⚠ 下载失败，请检查 URL 或网络连接！\e[0m"
                exit 1
            fi
            echo -e "\e[32m[+] 下载完成\e[0m"
        fi

        echo -e "\e[33m🌍 开始解压安装包...\e[0m"
        tar -jxf ${PACKAGE_NAME} -C /opt/software/openGauss
        if [ $? -ne 0 ]; then
            echo -e "\e[31m⚠ 解压失败，请检查文件完整性或目录权限！\e[0m"
            exit 1
        fi

        cd /opt/software/openGauss/simpleInstall
        echo -e "\e[33m🌍 开始执行安装脚本...\e[0m"
        echo "no" | sh install.sh -w '"${DB_INIT_PASSWORD}"'
        if [ $? -ne 0 ]; then
            echo -e "\e[31m⚠ 安装脚本执行失败，请检查安装过程！\e[0m"
            exit 1
        fi
    '
    INSTALL_STATUS=$(su - ${OMM_USER} -c "gs_ctl status -D /opt/software/openGauss/data/single_node -Z single_node" 2>/dev/null)
    if echo "$INSTALL_STATUS" | grep -q "running"; then
        echo -e "${BG_GREEN}✅ openGauss 安装成功！${NC}"
    else
        echo -e "${BG_RED}⚠ openGauss 未运行，请检查安装日志！${NC}"
        exit 1
    fi
    echo -e "${BG_GREEN}--------------------------------------------------${NC}"
}

#########################
# 8. 配置 openGauss 远程连接
#########################
configure_opengauss() {
    echo -e "${BG_CYAN}🚀 [洛洛 - 步骤 8] 配置 openGauss 远程连接${NC}"
    su - ${OMM_USER} -c '
    PG_HBA="/opt/software/openGauss/data/single_node/pg_hba.conf"
    POSTGRES_CONF="/opt/software/openGauss/data/single_node/postgresql.conf"

    if [ -f "$PG_HBA" ]; then
        echo "host all all 0.0.0.0/0 sha256" >> "$PG_HBA"
        echo -e "\e[32m🕊 已追加远程连接配置到 pg_hba.conf\e[0m"
    else
        echo -e "\e[31m🐋 找不到 $PG_HBA 配置文件！\e[0m"
    fi

    if [ -f "$POSTGRES_CONF" ]; then
        echo -e "\nlisten_addresses = '\''*'\''  #任意IP连接" >> "$POSTGRES_CONF"
        echo "ssl = off               #关闭ssl连接" >> "$POSTGRES_CONF"
        echo -e "\e[32m🕊 已追加远程连接配置到 postgresql.conf\e[0m"
    else
        echo -e "\e[31m🐋 找不到 $POSTGRES_CONF 配置文件！\e[0m"
    fi'
    echo -e "${BG_GREEN}--------------------------------------------------${NC}"
}

#########################
# 9. 测试 openGauss 数据库
#########################
start_opengauss() {
    echo -e "${BG_CYAN}🚀 [洛洛 - 步骤 9] 检测 openGauss 进程${NC}"
    ps ux | grep gaussdb | grep -v grep
    echo -e "${BG_GREEN}--------------------------------------------------${NC}"
}

#########################
# 10. 交互创建数据库及授权（omm 用户下执行）
#########################
create_database() {
    echo -e "${BG_CYAN}🚀 [洛洛 - 步骤 10] 创建数据库及授权用户${NC}"
    DB_NAME_DEFAULT="dbname"
    DB_USER_DEFAULT="dbuser"
    DB_PASS="Gauss@123"

    if [ $AUTO_MODE -eq 1 ]; then
        DB_NAME=$DB_NAME_DEFAULT
        DB_USER=$DB_USER_DEFAULT
        echo -e "${BG_YELLOW}🌍 无交互模式下，使用默认数据库名称：${DB_NAME}，用户：${DB_USER}，密码：${DB_PASS}${NC}"
    else
        read -p "请输入要创建的数据库名称（默认：${DB_NAME_DEFAULT}）：" DB_NAME
        DB_NAME=${DB_NAME:-$DB_NAME_DEFAULT}
        read -p "请输入要创建的数据库用户（默认：${DB_USER_DEFAULT}）：" DB_USER
        DB_USER=${DB_USER:-$DB_USER_DEFAULT}
        echo -e "${BG_YELLOW}🌍 ${DB_USER} 用户密码默认为：${DB_PASS}，请根据需要自行修改！${NC}"
    fi

    SQL_FILE=$(mktemp) || { echo -e "${BG_RED}⚠ 创建临时文件失败！${NC}"; exit 1; }
	# 设置临时文件权限，确保 ${OMM_USER} 可读
    chmod 644 "$SQL_FILE"
    trap 'rm -f "$SQL_FILE"' EXIT

    cat <<'EOF' > "$SQL_FILE"
CREATE USER __DB_USER__ WITH CREATEDB PASSWORD "__DB_PASS__";
CREATE DATABASE __DB_NAME__ WITH OWNER __DB_USER__;
GRANT ALL PRIVILEGES ON DATABASE __DB_NAME__ TO __DB_USER__;
GRANT ALL PRIVILEGES TO __DB_USER__;
EOF

    sed -i \
      -e "s/__DB_USER__/$DB_USER/g" \
      -e "s/__DB_PASS__/$DB_PASS/g" \
      -e "s/__DB_NAME__/$DB_NAME/g" \
      "$SQL_FILE"

    echo -e "${BG_BLUE}💻 正在执行 SQL 脚本创建数据库和用户...${NC}"
    su - ${OMM_USER} -c "gsql -d postgres -p ${DB_PORT} -f \"$SQL_FILE\""
    RET=$?
    if [ ${RET} -ne 0 ]; then
        echo -e "${BG_RED}⚠ SQL 脚本执行失败，请检查 openGauss 状态！${NC}"
    fi

    echo -e "${BG_BLUE}💻 验证数据库连接...${NC}"
    for i in {1..3}; do
        su - ${OMM_USER} -c "gsql -d ${DB_NAME} -p ${DB_PORT} -U ${DB_USER} -W\"${DB_PASS}\" -c \"\conninfo\"" && break || { echo -e "${BG_YELLOW}🌍 第 $i 次验证失败，等待2秒后重试...${NC}"; sleep 2; }
    done
    echo -e "${BG_GREEN}--------------------------------------------------${NC}"
}

#########################
# 11. 设置 omm 用户开机自启
#########################
setup_autostart() {
    echo -e "${BG_CYAN}🚀 [洛洛 - 步骤 11] 设置开机自启${NC}"
    PROFILE="/home/${OMM_USER}/.bash_profile"
    START_CMD="gs_ctl start -D /opt/software/openGauss/data/single_node -Z single_node"
    if ! grep -q "$START_CMD" "$PROFILE"; then
        echo "" >> "$PROFILE"  # 追加空行
        echo "" >> "$PROFILE"  # 追加空行
        echo "$START_CMD" >> "$PROFILE"
        echo -e "${BG_GREEN}✅ 已添加开机自启命令到 $PROFILE${NC}"
    else
        echo -e "${BG_YELLOW}[+] $PROFILE 中已存在自启命令${NC}"
    fi
    echo -e "${BG_GREEN}--------------------------------------------------${NC}"
}

#########################
# 12. 重启数据库并检查
#########################
restart_opengauss() {
    echo -e "${BG_CYAN}🚀 [洛洛 - 步骤 12] 重启 openGauss 数据库${NC}"
    for attempt in {1..3}; do
        echo -e "${BG_BLUE}[*] 尝试第 $attempt 次重启...${NC}"
        OUTPUT=$(su - ${OMM_USER} -c "gs_ctl restart -D /opt/software/openGauss/data/single_node -Z single_node" 2>&1)
        if echo "$OUTPUT" | grep -q "server started"; then
            echo -e "${BG_GREEN}✅ openGauss 数据库重启成功！${NC}"
            break
        else
            echo -e "${BG_YELLOW}🌍 重启失败，输出：${NC}"
            echo "$OUTPUT"
            if [ $attempt -lt 3 ]; then
                echo -e "${BG_YELLOW}🌍 等待5秒后重试...${NC}"
                sleep 5
            else
                echo -e "${BG_RED}⚠ openGauss 数据库重启失败，请检查日志。${NC}"
            fi
        fi
    done
    echo -e "${BG_GREEN}--------------------------------------------------${NC}"
}

#########################
# 13. 输出后续提示
#########################
# final_tips() {
#     echo -e "${BG_GREEN}==================================================${NC}"
#     echo -e "${BG_CYAN}🚀 openGauss 安装部署完成！${NC}"
#     echo -e "1. 安装位置: /opt/software/openGauss"
#     echo -e "2. 系统 ${OMM_USER} 用户密码: ${OMM_USER_PASSWORD_DEFAULT}"
#     echo -e "3. 数据库初始化密码: ${DB_INIT_PASSWORD}"
#     echo -e "4. 数据库端口: ${DB_PORT} 服务器IP地址: ${CURRENT_IP}"
#     echo -e "5. 数据库创建信息: 数据库名称 '${DB_NAME:-dbname}'，用户 '${DB_USER:-dbuser}'，密码 'Gauss@123'"
#     echo -e "6. 使用快捷命令 'db' 可快速启动/关闭数据库，请勿强行 kill 进程，避免造成问题！"
#     echo -e "7. 如需${BG_CYAN}特定IP连接${NC}，请修改 /opt/software/openGauss/data/single_node/postgresql.conf 文件末尾配置！"
#     echo -e "${BG_PURPLE}🌌 如果你觉得有用，可以给洛洛一个一键三联！🐋${NC}"
#     echo -e "${BG_GREEN}==================================================${NC}"
# }
final_tips() {
    # 定义日志文件路径
    LOG_DIR="/opt/software/openGauss"
    LOG_FILE="$LOG_DIR/luo-gauss-init"
    # 输出装饰性内容（只在屏幕上显示，不写入文件）
    echo -e "${BG_GREEN}==================================================${NC}"
    echo -e "${BG_CYAN}🚀 openGauss 安装部署完成！${NC}"

    # 输出并写入文件的纯文本内容
    echo -e "1. 安装位置: /opt/software/openGauss" | tee -a "$LOG_FILE"
    echo -e "2. 系统 ${OMM_USER} 用户密码: ${OMM_USER_PASSWORD_DEFAULT}" | tee -a "$LOG_FILE"
    echo -e "3. 数据库初始化密码: ${DB_INIT_PASSWORD}" | tee -a "$LOG_FILE"
    echo -e "4. 数据库端口: ${DB_PORT} 服务器IP地址: ${CURRENT_IP}" | tee -a "$LOG_FILE"
    echo -e "5. 数据库创建信息: 数据库名称 '${DB_NAME:-dbname}'，用户 '${DB_USER:-dbuser}'，密码 'Gauss@123'" | tee -a "$LOG_FILE"
    echo -e "6. 使用快捷命令 'db' 可快速启动/关闭数据库，请勿强行 kill 进程，避免造成问题！" | tee -a "$LOG_FILE"
    echo -e "7. 如需特定IP连接，请修改 /opt/software/openGauss/data/single_node/postgresql.conf 文件末尾配置！" | tee -a "$LOG_FILE"

    # 输出装饰性内容（只在屏幕上显示，不写入文件）
    echo -e "${BG_PURPLE}🌌 如果你觉得有用，可以给洛洛一个一键三联！🐋${NC}"
    echo -e "${BG_GREEN}==================================================${NC}"
}

#########################
# 主流程调用
#########################
main() {
    echo -e "${BG_CYAN}🚀 欢迎使用洛白（luogoddes）的 openGauss 安装脚本 🐋${NC}"
    modify_network
    configure_firewall
    disable_swap
    create_group_user
    setup_directories
    download_db_script
    install_opengauss
    configure_opengauss
    start_opengauss
    create_database
    setup_autostart
    restart_opengauss
    final_tips
}

# 执行主函数
main "$1"